<script>
// ============================================================
// SCRIPT 1: MENU KANBAN + CONEXÕES NO SIDEBAR
// ============================================================
(function() {
  'use strict';

  const KANBAN_URL = 'https://kanban.seudominio.com.br';

  var panelOpen = false;
  var menuItemsAdded = false;
  var lastUrl = location.href;
  var observer = null;

  function injectCSS() {
    if (document.getElementById('cw-custom-css')) return;
    var css = document.createElement('style');
    css.id = 'cw-custom-css';
    css.textContent = '#cw-custom-menu-kanban,#cw-custom-menu-conexoes{margin-top:0 !important;margin-bottom:0 !important}#cw-custom-menu-kanban .menu-icon,#cw-custom-menu-conexoes .menu-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}#cw-custom-menu-kanban .menu-icon svg,#cw-custom-menu-conexoes .menu-icon svg{width:16px;height:16px}#cw-custom-panel{position:fixed;top:0;right:0;bottom:0;background:#fff;z-index:100;display:none;flex-direction:column}#cw-custom-panel.visible{display:flex}#cw-custom-panel .panel-body{flex:1;position:relative;background:#fff;overflow:hidden}#cw-custom-panel iframe{width:100%;height:100%;border:none;display:block}#cw-custom-panel .loading-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;z-index:10}#cw-custom-panel .loading-overlay.hidden{display:none}#cw-custom-panel .spinner{width:48px;height:48px;border:4px solid #e0e0e0;border-top-color:#1f93ff;border-radius:50%;animation:cwSpin .8s linear infinite}@keyframes cwSpin{to{transform:rotate(360deg)}}#cw-custom-panel .loading-text{margin-top:16px;color:#6e84a3;font-size:14px}#cw-custom-panel .error-overlay{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;background:#fff;text-align:center;padding:40px;z-index:10}#cw-custom-panel .error-overlay.visible{display:flex}#cw-custom-panel .error-icon{font-size:64px;margin-bottom:20px}#cw-custom-panel .error-title{font-size:20px;font-weight:600;color:#1f2d3d;margin:0 0 10px}#cw-custom-panel .error-text{color:#6e84a3;margin:0 0 24px;max-width:400px;line-height:1.5}#cw-custom-panel .error-btn{padding:12px 24px;background:#1f93ff;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}#cw-custom-panel .error-btn:hover{background:#1976d2}';
    document.head.appendChild(css);
  }

  function getSidebarWidth() {
    var aside = document.querySelector('aside.bg-n-solid-2, aside[class*="bg-n-solid"], aside.border-r, aside');
    if (aside) {
      return aside.getBoundingClientRect().right;
    }
    return 200;
  }

  function createPanel() {
    if (document.getElementById('cw-custom-panel')) return;
    var panel = document.createElement('div');
    panel.id = 'cw-custom-panel';
    panel.innerHTML = '<div class="panel-body"><div class="loading-overlay" id="cw-loading"><div class="spinner"></div><p class="loading-text">Carregando...</p></div><div class="error-overlay" id="cw-error"><div class="error-icon">🔒</div><h3 class="error-title">Site Protegido</h3><p class="error-text">Este site possui proteções que impedem a exibição incorporada.</p><button class="error-btn" onclick="window.cwCustomExternal()">↗️ Abrir em Nova Aba</button></div><iframe id="cw-iframe" src="about:blank"></iframe></div>';
    document.body.appendChild(panel);
  }

  function getAuthFromCookie() {
    var cookies = document.cookie.split(';');
    for (var i = 0; i < cookies.length; i++) {
      var cookie = cookies[i].trim();
      if (cookie.indexOf('cw_d_session_info=') === 0) {
        try {
          var value = cookie.substring('cw_d_session_info='.length);
          var parsed = JSON.parse(decodeURIComponent(value));
          if (parsed['access-token'] && parsed['client'] && parsed['uid']) {
            return parsed;
          }
        } catch (e) {
          console.log('[CW Menu] Erro ao parsear cookie:', e);
        }
      }
    }
    return null;
  }

  window.cwCustomOpen = function(path) {
    path = path || '';
    panelOpen = true;
    var panel = document.getElementById('cw-custom-panel');
    var iframe = document.getElementById('cw-iframe');
    var loading = document.getElementById('cw-loading');
    var error = document.getElementById('cw-error');
    var kanbanItem = document.getElementById('cw-custom-menu-kanban');
    var conexoesItem = document.getElementById('cw-custom-menu-conexoes');

    panel.style.left = getSidebarWidth() + 'px';
    loading.classList.remove('hidden');
    error.classList.remove('visible');
    iframe.src = KANBAN_URL + path;
    panel.classList.add('visible');

    if (path === '/conexoes' && conexoesItem) {
      conexoesItem.classList.add('active');
      if (kanbanItem) kanbanItem.classList.remove('active');
    } else if (kanbanItem) {
      kanbanItem.classList.add('active');
      if (conexoesItem) conexoesItem.classList.remove('active');
    }

    iframe.onload = function() {
      loading.classList.add('hidden');
      var auth = getAuthFromCookie();
      if (auth && iframe.contentWindow) {
        console.log('[CW Menu] Enviando token para iframe...');
        iframe.contentWindow.postMessage({
          type: 'AUTH_TOKEN',
          payload: auth
        }, '*');
      }
    };

    setTimeout(function() { if (!loading.classList.contains('hidden')) { loading.classList.add('hidden'); error.classList.add('visible'); } }, 8000);
  };

  window.cwCustomClose = function() {
    panelOpen = false;
    var panel = document.getElementById('cw-custom-panel');
    var iframe = document.getElementById('cw-iframe');
    var kanbanItem = document.getElementById('cw-custom-menu-kanban');
    var conexoesItem = document.getElementById('cw-custom-menu-conexoes');

    panel.classList.remove('visible');
    iframe.src = 'about:blank';
    if (kanbanItem) kanbanItem.classList.remove('active');
    if (conexoesItem) conexoesItem.classList.remove('active');
  };

  window.cwCustomExternal = function() { window.open(KANBAN_URL, '_blank'); };
  window.cwCustomToggleKanban = function() { panelOpen ? window.cwCustomClose() : window.cwCustomOpen(''); };
  window.cwCustomToggleConexoes = function() { panelOpen ? window.cwCustomClose() : window.cwCustomOpen('/conexoes'); };

  function closeOnNavigation() {
    if (panelOpen && location.href !== lastUrl) {
      window.cwCustomClose();
    }
    lastUrl = location.href;
  }

  function setupNavigationDetection() {
    window.addEventListener('popstate', closeOnNavigation);
    var origPush = history.pushState;
    var origReplace = history.replaceState;
    history.pushState = function() { origPush.apply(this, arguments); closeOnNavigation(); };
    history.replaceState = function() { origReplace.apply(this, arguments); closeOnNavigation(); };
    document.addEventListener('click', function(e) {
      if (!panelOpen) return;
      var link = e.target.closest('a');
      if (link && !link.closest('#cw-custom-panel')) {
        setTimeout(closeOnNavigation, 100);
      }
    }, true);
  }

  function addMenuItems() {
    if (document.getElementById('cw-custom-menu-kanban')) { menuItemsAdded = true; return true; }

    var mainNav = document.querySelector('aside nav ul.list-none, aside nav > ul, nav.grid ul');
    if (!mainNav) {
      console.log('[CW Menu] Não encontrou ul do menu principal');
      return false;
    }

    var allLi = mainNav.querySelectorAll(':scope > li');
    if (allLi.length === 0) {
      console.log('[CW Menu] Não encontrou itens li no menu');
      return false;
    }

    var refLi = null;
    var refLink = null;
    for (var i = 0; i < allLi.length; i++) {
      var text = allLi[i].textContent.toLowerCase();
      if (text.includes('relatório') || text.includes('report') || text.includes('campanha') || text.includes('campaign')) {
        refLi = allLi[i];
        refLink = refLi.querySelector('a, div[role="button"]');
        break;
      }
    }

    if (!refLi) {
      refLi = allLi[allLi.length - 1];
      refLink = refLi.querySelector('a, div[role="button"]');
    }

    if (!refLi || !refLink) {
      console.log('[CW Menu] Não encontrou item de referência');
      return false;
    }

    // Menu Kanban
    var kanbanLi = document.createElement('li');
    kanbanLi.className = refLi.className;
    var kanbanItem = document.createElement('div');
    kanbanItem.id = 'cw-custom-menu-kanban';
    kanbanItem.className = refLink.className;
    kanbanItem.setAttribute('role', 'button');
    kanbanItem.style.cursor = 'pointer';
    kanbanItem.innerHTML = '<div class="relative flex items-center gap-2"><div class="flex items-center gap-1.5 flex-grow min-w-0"><span class="menu-icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line><line x1="15" y1="3" x2="15" y2="21"></line></svg></span><span class="text-sm font-medium leading-5 truncate">Kanban</span></div></div>';
    kanbanItem.onclick = function(e) { e.preventDefault(); window.cwCustomToggleKanban(); };
    kanbanLi.appendChild(kanbanItem);

    // Menu Conexões
    var conexoesLi = document.createElement('li');
    conexoesLi.className = refLi.className;
    var conexoesItem = document.createElement('div');
    conexoesItem.id = 'cw-custom-menu-conexoes';
    conexoesItem.className = refLink.className;
    conexoesItem.setAttribute('role', 'button');
    conexoesItem.style.cursor = 'pointer';
    conexoesItem.innerHTML = '<div class="relative flex items-center gap-2"><div class="flex items-center gap-1.5 flex-grow min-w-0"><span class="menu-icon"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg></span><span class="text-sm font-medium leading-5 truncate">Conexões</span></div></div>';
    conexoesItem.onclick = function(e) { e.preventDefault(); window.cwCustomToggleConexoes(); };
    conexoesLi.appendChild(conexoesItem);

    mainNav.insertBefore(kanbanLi, refLi);
    mainNav.insertBefore(conexoesLi, refLi);

    menuItemsAdded = true;
    if (observer) { observer.disconnect(); observer = null; }
    console.log('[CW Menu] Itens Kanban e Conexões adicionados!');
    return true;
  }

  function initMenu() {
    injectCSS();
    createPanel();
    setupNavigationDetection();
    var attempts = 0;
    var maxAttempts = 30;
    function tryAdd() {
      if (menuItemsAdded) return;
      if (addMenuItems()) return;
      attempts++;
      if (attempts < maxAttempts) setTimeout(tryAdd, 500);
    }
    setTimeout(tryAdd, 1500);
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initMenu);
  } else {
    initMenu();
  }
})();

// ============================================================
// SCRIPT 2: WIDGET FLUTUANTE NA CONVERSA (Configurações do Kanban)
// ============================================================
(function() {
  'use strict';

  // ⚠️ MESMA URL DO SCRIPT 1 - Substituída automaticamente
  const KANBAN_URL = 'https://kanban.seudominio.com.br';

  var WIDGET_CONFIG = {
    apiUrl: KANBAN_URL + '/api'
  };

  var currentConversationId = null;
  var widgetModalState = {
    view: 'main', // 'main', 'funnels', 'funnelStages', 'scheduling'
    funnels: [],
    selectedFunnel: null,
    currentStage: null,
    scheduledMessages: []
  };

  function getAuthHeaders() {
    var cookies = document.cookie.split(';');
    for (var i = 0; i < cookies.length; i++) {
      var cookie = cookies[i].trim();
      if (cookie.indexOf('cw_d_session_info=') === 0) {
        try {
          var value = cookie.substring('cw_d_session_info='.length);
          var parsed = JSON.parse(decodeURIComponent(value));
          if (parsed['access-token'] && parsed['client'] && parsed['uid']) {
            return {
              'access-token': parsed['access-token'],
              'token-type': parsed['token-type'] || 'Bearer',
              'client': parsed['client'],
              'expiry': parsed['expiry'] || '',
              'uid': parsed['uid']
            };
          }
        } catch (e) {
          console.log('[Kanban Widget] Erro ao parsear cookie:', e);
        }
      }
    }
    return null;
  }

  function getConversationIdFromUrl() {
    var match = location.pathname.match(/\/conversations\/(\d+)/);
    return match ? parseInt(match[1]) : null;
  }

  function injectWidgetCSS() {
    if (document.getElementById('cw-kanban-widget-css')) return;
    var css = document.createElement('style');
    css.id = 'cw-kanban-widget-css';
    css.textContent = '#cw-kanban-header-btn{display:inline-flex;align-items:center;min-w-0;gap:2px;transition:all 100ms ease-out;border:0;border-radius:8px;outline:1px solid transparent;opacity:50;cursor:pointer;background:transparent;height:32px;width:32px;padding:0;justify-content:center;color:var(--s-600)}#cw-kanban-header-btn:hover{opacity:100;background:rgba(0,0,0,0.05)}#cw-kanban-header-btn.has-stage{opacity:100;color:#059669}#cw-kanban-header-btn svg{width:16px;height:16px}#cw-kanban-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:none;align-items:center;justify-content:center;z-index:1000}#cw-kanban-modal-overlay.visible{display:flex}#cw-kanban-modal{background:#fff;border-radius:12px;width:90%;max-width:500px;max-height:85vh;overflow:hidden;box-shadow:0 20px 40px rgba(0,0,0,.2)}#cw-kanban-modal .modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}#cw-kanban-modal .modal-header h3{margin:0;font-size:16px;font-weight:600;color:#111827}#cw-kanban-modal .close-btn{background:none;border:none;font-size:24px;color:#6b7280;cursor:pointer;padding:0;line-height:1}#cw-kanban-modal .close-btn:hover{color:#111827}#cw-kanban-modal .modal-body{padding:16px 20px;max-height:65vh;overflow-y:auto}#cw-kanban-modal .loading{display:flex;align-items:center;justify-content:center;gap:12px;padding:32px;color:#6b7280}#cw-kanban-modal .loading .spinner{width:20px;height:20px;border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:cwWidgetSpin .8s linear infinite}@keyframes cwWidgetSpin{to{transform:rotate(360deg)}}#cw-kanban-modal .error-msg{padding:12px;background:#fef2f2;color:#dc2626;border-radius:8px;font-size:14px;margin-bottom:12px}#cw-kanban-modal .success-msg{padding:12px;background:#f0fdf4;color:#059669;border-radius:8px;font-size:14px;margin-bottom:12px}#cw-kanban-modal .current-stage{display:flex;align-items:center;gap:8px;padding:12px;background:#f0fdf4;border-radius:8px;margin-bottom:16px;flex-wrap:wrap}#cw-kanban-modal .current-stage .label{font-size:12px;color:#6b7280}#cw-kanban-modal .current-stage .value{font-size:14px;font-weight:500;color:#059669;flex:1}#cw-kanban-modal .remove-btn{padding:4px 12px;background:#fee2e2;color:#dc2626;border:none;border-radius:4px;font-size:12px;cursor:pointer}#cw-kanban-modal .remove-btn:hover{background:#fecaca}#cw-kanban-modal .section-title{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:500;color:#374151;margin-bottom:12px}#cw-kanban-modal .section-divider{border:0;border-top:1px solid #e5e7eb;margin:20px 0}#cw-kanban-modal .back-btn{background:none;border:none;color:#3b82f6;font-size:14px;cursor:pointer;padding:0;margin-bottom:12px;display:flex;align-items:center;gap:4px}#cw-kanban-modal .back-btn:hover{text-decoration:underline}#cw-kanban-modal .list{display:flex;flex-direction:column;gap:8px}#cw-kanban-modal .list-item{display:flex;align-items:center;gap:12px;padding:12px;background:#f9fafb;border-radius:8px;cursor:pointer;transition:background .15s ease;border:none;width:100%;text-align:left;font-family:inherit}#cw-kanban-modal .list-item:hover{background:#f3f4f6}#cw-kanban-modal .list-item.selected{background:#dbeafe;border:1px solid #3b82f6}#cw-kanban-modal .color-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}#cw-kanban-modal .item-name{flex:1;font-size:14px;color:#111827}#cw-kanban-modal .item-count{font-size:12px;color:#9ca3af}#cw-kanban-modal .empty-state{padding:24px;text-align:center;color:#9ca3af;font-size:14px}#cw-kanban-modal .form-group{margin-bottom:12px}#cw-kanban-modal .form-label{display:block;font-size:13px;font-weight:500;color:#374151;margin-bottom:6px}#cw-kanban-modal .form-input,#cw-kanban-modal .form-textarea{width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-family:inherit;box-sizing:border-box}#cw-kanban-modal .form-textarea{resize:vertical;min-height:80px}#cw-kanban-modal .form-input:focus,#cw-kanban-modal .form-textarea:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#cw-kanban-modal .btn-primary{width:100%;padding:10px 16px;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:background .15s}#cw-kanban-modal .btn-primary:hover{background:#2563eb}#cw-kanban-modal .btn-primary:disabled{background:#9ca3af;cursor:not-allowed}#cw-kanban-modal .scheduled-item{padding:12px;background:#f9fafb;border-radius:8px;margin-bottom:8px}#cw-kanban-modal .scheduled-header{display:flex;justify-content:space-between;align-items:start;margin-bottom:8px}#cw-kanban-modal .scheduled-date{font-size:12px;font-weight:500;color:#3b82f6}#cw-kanban-modal .scheduled-status{font-size:11px;padding:2px 8px;border-radius:4px;font-weight:500}#cw-kanban-modal .status-pending{background:#fef3c7;color:#92400e}#cw-kanban-modal .status-sent{background:#d1fae5;color:#065f46}#cw-kanban-modal .status-cancelled{background:#fee2e2;color:#991b1b}#cw-kanban-modal .status-failed{background:#fee2e2;color:#991b1b}#cw-kanban-modal .scheduled-message{font-size:13px;color:#4b5563;margin-bottom:8px;word-wrap:break-word}#cw-kanban-modal .scheduled-attachment{font-size:12px;color:#6b7280;margin-bottom:8px;padding:6px 8px;background:#fff;border-radius:4px;display:inline-block}#cw-kanban-modal .scheduled-actions{display:flex;gap:8px}#cw-kanban-modal .btn-small{padding:4px 10px;border:none;border-radius:4px;font-size:12px;cursor:pointer;font-weight:500}#cw-kanban-modal .btn-edit{background:#dbeafe;color:#1e40af}#cw-kanban-modal .btn-edit:hover{background:#bfdbfe}#cw-kanban-modal .btn-cancel{background:#fee2e2;color:#dc2626}#cw-kanban-modal .btn-cancel:hover{background:#fecaca}#cw-kanban-modal .current-attachment{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f0fdf4;border-radius:6px;font-size:13px;color:#059669}#cw-kanban-modal .menu-option{display:flex;align-items:center;gap:12px;padding:14px 16px;background:#f9fafb;border-radius:8px;cursor:pointer;transition:all .15s;border:2px solid transparent;margin-bottom:10px}#cw-kanban-modal .menu-option:hover{background:#f3f4f6;border-color:#e5e7eb}#cw-kanban-modal .menu-option-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:8px;background:#fff;font-size:20px}#cw-kanban-modal .menu-option-content{flex:1}#cw-kanban-modal .menu-option-title{font-size:14px;font-weight:500;color:#111827;margin-bottom:2px}#cw-kanban-modal .menu-option-desc{font-size:12px;color:#6b7280}';
    document.head.appendChild(css);
  }

  function createHeaderButton() {
    console.log('[Kanban Widget] === createHeaderButton iniciado ===');

    var existing = document.getElementById('cw-kanban-header-btn');
    if (existing) {
      console.log('[Kanban Widget] Botão já existe, retornando true');
      return true;
    }

    var allButtons = document.querySelectorAll('button');
    console.log('[Kanban Widget] Total de botões na página: ' + allButtons.length);

    var actionsContainer = null;
    var siblingBtn = null;

    for (var i = 0; i < allButtons.length; i++) {
      var btn = allButtons[i];
      var rect = btn.getBoundingClientRect();

      if (rect.width >= 28 && rect.width <= 40 && rect.height >= 28 && rect.height <= 40 && rect.width > 0) {
        if (rect.left > window.innerWidth * 0.6) {
          var parent = btn.parentElement;
          if (parent) {
            var siblings = parent.querySelectorAll(':scope > button');
            if (siblings.length >= 2 && siblings.length <= 6) {
              console.log('[Kanban Widget] Candidato encontrado! Botões no container: ' + siblings.length + ', posição X: ' + rect.left);
              actionsContainer = parent;
              siblingBtn = btn;
              break;
            }
          }
        }
      }
    }

    if (!actionsContainer) {
      console.log('[Kanban Widget] Container não encontrado pelo método de botões');

      var allSpans = document.querySelectorAll('span');
      for (var j = 0; j < allSpans.length; j++) {
        if (allSpans[j].textContent.trim() === 'Ações da conversa') {
          console.log('[Kanban Widget] Encontrou "Ações da conversa", buscando botões acima...');
          var section = allSpans[j].closest('div');
          if (section && section.parentElement) {
            var parentDiv = section.parentElement;
            var divsAbove = parentDiv.querySelectorAll('div');
            for (var k = 0; k < divsAbove.length; k++) {
              var btns = divsAbove[k].querySelectorAll(':scope > button');
              if (btns.length >= 2 && btns.length <= 6) {
                var divRect = divsAbove[k].getBoundingClientRect();
                var sectionRect = section.getBoundingClientRect();
                if (divRect.bottom < sectionRect.top + 50) {
                  actionsContainer = divsAbove[k];
                  siblingBtn = btns[0];
                  console.log('[Kanban Widget] Container encontrado via fallback com ' + btns.length + ' botões');
                  break;
                }
              }
            }
          }
          break;
        }
      }
    }

    if (!actionsContainer) {
      console.log('[Kanban Widget] FALHA: Nenhum container encontrado');
      return false;
    }

    if (actionsContainer.querySelector('#cw-kanban-header-btn')) {
      console.log('[Kanban Widget] Botão já existe no container');
      return true;
    }

    var newBtn = document.createElement('button');
    newBtn.id = 'cw-kanban-header-btn';
    newBtn.title = 'Configurações do Kanban';

    if (siblingBtn) {
      newBtn.className = siblingBtn.className;
      console.log('[Kanban Widget] Classes copiadas: ' + siblingBtn.className.substring(0, 50) + '...');
    } else {
      newBtn.className = 'inline-flex items-center justify-center min-w-0 gap-0.5 transition-all duration-100 ease-out border-0 rounded-lg outline outline-1 outline-transparent disabled:opacity-50 bg-n-slate-9/10 text-n-slate-9/10 hover:enabled:bg-n-slate-9/20 focus-visible:bg-n-slate-9/20 outline-transparent h-8 w-8 p-0 text-sm';
    }

    newBtn.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="9" rx="1"/><rect x="14" y="3" width="7" height="5" rx="1"/><rect x="14" y="12" width="7" height="9" rx="1"/><rect x="3" y="16" width="7" height="5" rx="1"/></svg>';

    newBtn.onclick = function(e) {
      e.preventDefault();
      e.stopPropagation();
      window.openKanbanWidgetModal();
    };

    actionsContainer.appendChild(newBtn);
    console.log('[Kanban Widget] SUCESSO! Botão adicionado ao container');

    return true;
  }

  function createWidgetModal() {
    if (document.getElementById('cw-kanban-modal-overlay')) return;
    var overlay = document.createElement('div');
    overlay.id = 'cw-kanban-modal-overlay';
    overlay.onclick = function(e) { if (e.target === overlay) window.closeKanbanWidgetModal(); };
    overlay.innerHTML = '<div id="cw-kanban-modal"><div class="modal-header"><h3>Configurações do Kanban</h3><button class="close-btn" onclick="window.closeKanbanWidgetModal()">&times;</button></div><div class="modal-body" id="cw-kanban-modal-body"><div class="loading"><div class="spinner"></div><span>Carregando...</span></div></div></div>';
    document.body.appendChild(overlay);
  }

  window.openKanbanWidgetModal = function() {
    var overlay = document.getElementById('cw-kanban-modal-overlay');
    overlay.classList.add('visible');
    widgetModalState.view = 'main';
    widgetModalState.selectedFunnel = null;
    loadWidgetModalData();
  };

  window.closeKanbanWidgetModal = function() {
    var overlay = document.getElementById('cw-kanban-modal-overlay');
    overlay.classList.remove('visible');
  };

  async function loadWidgetModalData() {
    var body = document.getElementById('cw-kanban-modal-body');
    body.innerHTML = '<div class="loading"><div class="spinner"></div><span>Carregando...</span></div>';

    var authHeaders = getAuthHeaders();
    if (!authHeaders) {
      body.innerHTML = '<div class="error-msg">Token de autenticacao nao encontrado. Faca login novamente.</div>';
      return;
    }

    try {
      // Busca funis
      var funnelsRes = await fetch(WIDGET_CONFIG.apiUrl + '/funnels', {
        headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders)
      });
      if (!funnelsRes.ok) throw new Error('Erro ao carregar funis');
      var funnelsData = await funnelsRes.json();
      widgetModalState.funnels = funnelsData.data || [];

      // Busca stage atual se houver
      if (currentConversationId) {
        var stageRes = await fetch(WIDGET_CONFIG.apiUrl + '/kanban/conversation/' + currentConversationId + '/stage', {
          headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders)
        });
        if (stageRes.ok) {
          var stageData = await stageRes.json();
          widgetModalState.currentStage = stageData.data;
        }

        // Busca mensagens agendadas
        var scheduledRes = await fetch(WIDGET_CONFIG.apiUrl + '/conversations/' + currentConversationId + '/scheduled-messages', {
          headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders)
        });
        if (scheduledRes.ok) {
          var scheduledData = await scheduledRes.json();
          widgetModalState.scheduledMessages = scheduledData.data || [];
        }
      }

      renderWidgetModalContent();
    } catch (err) {
      body.innerHTML = '<div class="error-msg">' + err.message + '</div>';
    }
  }

  function formatDateTime(dateString) {
    var date = new Date(dateString);
    return date.toLocaleString('pt-BR', {
      day: '2-digit',
      month: '2-digit',
      year: 'numeric',
      hour: '2-digit',
      minute: '2-digit'
    });
  }

  function getStatusLabel(status) {
    var labels = {
      'pending': 'Pendente',
      'sent': 'Enviada',
      'cancelled': 'Cancelada',
      'failed': 'Falhou'
    };
    return labels[status] || status;
  }

  function renderWidgetModalContent() {
    var body = document.getElementById('cw-kanban-modal-body');
    var html = '';

    // VIEW: Menu Principal
    if (widgetModalState.view === 'main') {
      html += '<div class="menu-option" onclick="window.showFunnelsView()"><div class="menu-option-icon">📊</div><div class="menu-option-content"><div class="menu-option-title">Associar ao Funil</div><div class="menu-option-desc">Vincular conversa a uma etapa do kanban</div></div></div>';
      html += '<div class="menu-option" onclick="window.showSchedulingView()"><div class="menu-option-icon">⏰</div><div class="menu-option-content"><div class="menu-option-title">Agendar Mensagens</div><div class="menu-option-desc">Programar envio de mensagens</div></div></div>';
    }

    // VIEW: Lista de Funis
    else if (widgetModalState.view === 'funnels') {
      html += '<button class="back-btn" onclick="window.showMainView()">← Voltar</button>';

      if (widgetModalState.currentStage) {
        html += '<div class="current-stage"><span class="label">Etapa atual:</span><span class="value">' + widgetModalState.currentStage.funnelName + ' → ' + widgetModalState.currentStage.stageName + '</span><button class="remove-btn" onclick="window.removeFromKanbanWidget()">Remover</button></div>';
      }

      html += '<p class="section-title">📊 Selecione um funil:</p><div class="list">';
      if (widgetModalState.funnels.length === 0) {
        html += '<div class="empty-state">Nenhum funil encontrado. Crie um funil no Kanban primeiro.</div>';
      } else {
        widgetModalState.funnels.forEach(function(funnel) {
          html += '<button class="list-item" onclick="window.selectKanbanWidgetFunnel(' + funnel.id + ')"><div class="color-dot" style="background-color:' + funnel.color + '"></div><span class="item-name">' + funnel.name + '</span><span class="item-count">' + funnel.stages.length + ' etapas</span></button>';
        });
      }
      html += '</div>';
    }

    // VIEW: Etapas do Funil Selecionado
    else if (widgetModalState.view === 'funnelStages') {
      html += '<button class="back-btn" onclick="window.showFunnelsView()">← Voltar</button>';
      html += '<p class="section-title"><div class="color-dot" style="background-color:' + widgetModalState.selectedFunnel.color + '"></div>' + widgetModalState.selectedFunnel.name + '</p><div class="list">';
      widgetModalState.selectedFunnel.stages.forEach(function(stage) {
        var isSelected = widgetModalState.currentStage && widgetModalState.currentStage.stageId === stage.id;
        html += '<button class="list-item' + (isSelected ? ' selected' : '') + '" onclick="window.selectKanbanWidgetStage(' + stage.id + ')"><div class="color-dot" style="background-color:' + stage.color + '"></div><span class="item-name">' + stage.name + '</span></button>';
      });
      html += '</div>';
    }

    // VIEW: Agendamento de Mensagens
    else if (widgetModalState.view === 'scheduling') {
      html += '<button class="back-btn" onclick="window.showMainView()">← Voltar</button>';
      html += '<p class="section-title">⏰ Nova Mensagem Agendada</p>';
      html += '<div class="form-group"><label class="form-label">Mensagem</label><textarea class="form-textarea" id="schedule-message-text" placeholder="Digite a mensagem..."></textarea></div>';
      html += '<div class="form-group"><label class="form-label">Data e Hora</label><input type="datetime-local" class="form-input" id="schedule-message-date"></div>';
      html += '<div class="form-group"><label class="form-label">Anexo (opcional)</label><input type="file" class="form-input" id="schedule-attachment" accept="image/*,application/pdf,.doc,.docx"></div>';
      html += '<button class="btn-primary" onclick="window.createScheduledMessage()">Agendar Mensagem</button>';

      // Lista de mensagens agendadas
      if (widgetModalState.scheduledMessages.length > 0) {
        html += '<hr class="section-divider">';
        html += '<p class="section-title">📋 Mensagens Agendadas</p>';
        widgetModalState.scheduledMessages.forEach(function(msg) {
          html += '<div class="scheduled-item">';
          html += '<div class="scheduled-header">';
          html += '<span class="scheduled-date">' + formatDateTime(msg.scheduledAt) + '</span>';
          html += '<span class="scheduled-status status-' + msg.status + '">' + getStatusLabel(msg.status) + '</span>';
          html += '</div>';
          html += '<div class="scheduled-message">' + msg.message + '</div>';

          // Mostra anexo se houver
          if (msg.attachments) {
            try {
              var attachments = JSON.parse(msg.attachments);
              if (attachments.length > 0) {
                html += '<div class="scheduled-attachment">📎 ' + attachments[0].originalName + '</div>';
              }
            } catch (e) {}
          }

          if (msg.status === 'pending') {
            html += '<div class="scheduled-actions">';
            html += '<button class="btn-small btn-edit" onclick="window.editScheduledMessage(' + msg.id + ')">Editar</button>';
            html += '<button class="btn-small btn-cancel" onclick="window.cancelScheduledMessage(' + msg.id + ')">Cancelar</button>';
            html += '</div>';
          }
          html += '</div>';
        });
      }
    }
    // VIEW: Editar Mensagem Agendada
    else if (widgetModalState.view === 'edit-schedule' && widgetModalState.editingMessage) {
      var msg = widgetModalState.editingMessage;
      html += '<button class="back-btn" onclick="window.showSchedulingView()">← Voltar</button>';
      html += '<p class="section-title">✏️ Editar Mensagem Agendada</p>';
      html += '<div class="form-group"><label class="form-label">Mensagem</label><textarea class="form-textarea" id="edit-message-text">' + msg.message + '</textarea></div>';

      var dateValue = new Date(msg.scheduledAt).toISOString().slice(0, 16);
      html += '<div class="form-group"><label class="form-label">Data e Hora</label><input type="datetime-local" class="form-input" id="edit-message-date" value="' + dateValue + '"></div>';

      // Anexo existente
      var hasAttachment = false;
      if (msg.attachments) {
        try {
          var attachments = JSON.parse(msg.attachments);
          if (attachments.length > 0) {
            hasAttachment = true;
            html += '<div class="form-group"><label class="form-label">Anexo Atual</label><div class="current-attachment">📎 ' + attachments[0].originalName + ' <button class="btn-small btn-cancel" onclick="window.removeAttachment()">Remover</button></div></div>';
          }
        } catch (e) {}
      }

      html += '<div class="form-group"><label class="form-label">' + (hasAttachment ? 'Substituir Anexo' : 'Adicionar Anexo') + ' (opcional)</label><input type="file" class="form-input" id="edit-attachment" accept="image/*,application/pdf,.doc,.docx"></div>';
      html += '<button class="btn-primary" onclick="window.saveEditedMessage()">Salvar Alterações</button>';
    }

    body.innerHTML = html;
  }

  // Navegação entre views
  window.showMainView = function() {
    widgetModalState.view = 'main';
    renderWidgetModalContent();
  };

  window.showFunnelsView = function() {
    widgetModalState.view = 'funnels';
    renderWidgetModalContent();
  };

  window.showSchedulingView = function() {
    widgetModalState.view = 'scheduling';
    renderWidgetModalContent();
  };

  // Funções de Funis
  window.selectKanbanWidgetFunnel = function(funnelId) {
    widgetModalState.selectedFunnel = widgetModalState.funnels.find(function(f) { return f.id === funnelId; });
    widgetModalState.view = 'funnelStages';
    renderWidgetModalContent();
  };

  window.selectKanbanWidgetStage = async function(stageId) {
    var authHeaders = getAuthHeaders();
    if (!authHeaders || !currentConversationId) return;

    var body = document.getElementById('cw-kanban-modal-body');
    body.innerHTML = '<div class="loading"><div class="spinner"></div><span>Salvando...</span></div>';

    try {
      var res = await fetch(WIDGET_CONFIG.apiUrl + '/kanban/' + currentConversationId + '/move-to-stage', {
        method: 'PATCH',
        headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders),
        body: JSON.stringify({ stageId: stageId })
      });

      if (!res.ok) throw new Error('Erro ao salvar');

      var stage = widgetModalState.selectedFunnel.stages.find(function(s) { return s.id === stageId; });
      widgetModalState.currentStage = {
        stageId: stageId,
        stageName: stage.name,
        stageColor: stage.color,
        funnelId: widgetModalState.selectedFunnel.id,
        funnelName: widgetModalState.selectedFunnel.name
      };

      updateHeaderButton();
      body.innerHTML = '<div class="success-msg">✓ Conversa associada com sucesso!</div>';
      setTimeout(function() {
        widgetModalState.view = 'main';
        renderWidgetModalContent();
      }, 1500);
    } catch (err) {
      body.innerHTML = '<div class="error-msg">' + err.message + '</div>';
    }
  };

  window.removeFromKanbanWidget = async function() {
    var authHeaders = getAuthHeaders();
    if (!authHeaders || !currentConversationId) return;

    var body = document.getElementById('cw-kanban-modal-body');
    body.innerHTML = '<div class="loading"><div class="spinner"></div><span>Removendo...</span></div>';

    try {
      var res = await fetch(WIDGET_CONFIG.apiUrl + '/kanban/' + currentConversationId + '/remove', {
        method: 'DELETE',
        headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders)
      });

      if (!res.ok) throw new Error('Erro ao remover');

      widgetModalState.currentStage = null;
      updateHeaderButton();
      body.innerHTML = '<div class="success-msg">✓ Conversa removida do kanban!</div>';
      setTimeout(function() {
        widgetModalState.view = 'main';
        renderWidgetModalContent();
      }, 1500);
    } catch (err) {
      body.innerHTML = '<div class="error-msg">' + err.message + '</div>';
    }
  };

  // Funções de Agendamento
  window.createScheduledMessage = async function() {
    var messageEl = document.getElementById('schedule-message-text');
    var dateEl = document.getElementById('schedule-message-date');
    var attachmentEl = document.getElementById('schedule-attachment');

    if (!messageEl || !dateEl) return;

    var message = messageEl.value.trim();
    var scheduledAt = dateEl.value;
    var hasAttachment = attachmentEl && attachmentEl.files && attachmentEl.files[0];

    if (!message && !hasAttachment) {
      alert('Por favor, digite uma mensagem ou anexe um arquivo');
      return;
    }

    if (!scheduledAt) {
      alert('Por favor, selecione data e hora');
      return;
    }

    var authHeaders = getAuthHeaders();
    if (!authHeaders || !currentConversationId) return;

    var body = document.getElementById('cw-kanban-modal-body');
    body.innerHTML = '<div class="loading"><div class="spinner"></div><span>Agendando...</span></div>';

    try {
      // Usa FormData para enviar arquivo
      var formData = new FormData();
      formData.append('message', message);
      formData.append('scheduledAt', new Date(scheduledAt).toISOString());

      if (attachmentEl && attachmentEl.files && attachmentEl.files[0]) {
        formData.append('attachment', attachmentEl.files[0]);
      }

      var res = await fetch(WIDGET_CONFIG.apiUrl + '/conversations/' + currentConversationId + '/scheduled-messages', {
        method: 'POST',
        headers: authHeaders, // Não inclui Content-Type para FormData
        body: formData
      });

      if (!res.ok) {
        var errorData = await res.json();
        throw new Error(errorData.error || 'Erro ao agendar mensagem');
      }

      var result = await res.json();
      widgetModalState.scheduledMessages.push(result.data);

      body.innerHTML = '<div class="success-msg">✓ Mensagem agendada com sucesso!</div>';
      setTimeout(function() {
        renderWidgetModalContent();
      }, 1500);
    } catch (err) {
      body.innerHTML = '<div class="error-msg">' + err.message + '</div><button class="btn-primary" style="margin-top:12px" onclick="window.showSchedulingView()">Voltar</button>';
    }
  };

  window.cancelScheduledMessage = async function(msgId) {
    if (!confirm('Deseja realmente cancelar esta mensagem agendada?')) return;

    var authHeaders = getAuthHeaders();
    if (!authHeaders || !currentConversationId) return;

    var body = document.getElementById('cw-kanban-modal-body');
    body.innerHTML = '<div class="loading"><div class="spinner"></div><span>Cancelando...</span></div>';

    try {
      var res = await fetch(WIDGET_CONFIG.apiUrl + '/conversations/' + currentConversationId + '/scheduled-messages/' + msgId, {
        method: 'DELETE',
        headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders)
      });

      if (!res.ok) throw new Error('Erro ao cancelar mensagem');

      widgetModalState.scheduledMessages = widgetModalState.scheduledMessages.filter(function(m) { return m.id !== msgId; });

      body.innerHTML = '<div class="success-msg">✓ Mensagem cancelada!</div>';
      setTimeout(function() {
        renderWidgetModalContent();
      }, 1500);
    } catch (err) {
      body.innerHTML = '<div class="error-msg">' + err.message + '</div><button class="btn-primary" style="margin-top:12px" onclick="window.showSchedulingView()">Voltar</button>';
    }
  };

  window.editScheduledMessage = function(msgId) {
    var msg = widgetModalState.scheduledMessages.find(function(m) { return m.id === msgId; });
    if (!msg) return;

    widgetModalState.editingMessage = msg;
    widgetModalState.removeAttachmentFlag = false;
    widgetModalState.view = 'edit-schedule';
    renderWidgetModalContent();
  };

  window.saveEditedMessage = async function() {
    var messageEl = document.getElementById('edit-message-text');
    var dateEl = document.getElementById('edit-message-date');
    var attachmentEl = document.getElementById('edit-attachment');

    if (!messageEl || !dateEl || !widgetModalState.editingMessage) return;

    var message = messageEl.value.trim();
    var scheduledAt = dateEl.value;
    var hasAttachment = (attachmentEl && attachmentEl.files && attachmentEl.files[0]) ||
                       (widgetModalState.editingMessage.attachments && !widgetModalState.removeAttachmentFlag);

    if (!message && !hasAttachment) {
      alert('Por favor, digite uma mensagem ou anexe um arquivo');
      return;
    }

    if (!scheduledAt) {
      alert('Por favor, selecione data e hora');
      return;
    }

    var authHeaders = getAuthHeaders();
    if (!authHeaders || !currentConversationId) return;

    var body = document.getElementById('cw-kanban-modal-body');
    body.innerHTML = '<div class="loading"><div class="spinner"></div><span>Salvando...</span></div>';

    try {
      var formData = new FormData();
      formData.append('message', message);
      formData.append('scheduledAt', new Date(scheduledAt).toISOString());

      if (attachmentEl && attachmentEl.files && attachmentEl.files[0]) {
        formData.append('attachment', attachmentEl.files[0]);
      }

      if (widgetModalState.removeAttachmentFlag) {
        formData.append('removeAttachment', 'true');
      }

      var res = await fetch(WIDGET_CONFIG.apiUrl + '/conversations/' + currentConversationId + '/scheduled-messages/' + widgetModalState.editingMessage.id, {
        method: 'PATCH',
        headers: authHeaders,
        body: formData
      });

      if (!res.ok) {
        var errorData = await res.json();
        throw new Error(errorData.error || 'Erro ao atualizar mensagem');
      }

      var result = await res.json();

      // Atualiza na lista
      var index = widgetModalState.scheduledMessages.findIndex(function(m) { return m.id === result.data.id; });
      if (index !== -1) {
        widgetModalState.scheduledMessages[index] = result.data;
      }

      widgetModalState.editingMessage = null;
      body.innerHTML = '<div class="success-msg">✓ Mensagem atualizada com sucesso!</div>';
      setTimeout(function() {
        widgetModalState.view = 'scheduling';
        renderWidgetModalContent();
      }, 1500);
    } catch (err) {
      body.innerHTML = '<div class="error-msg">' + err.message + '</div><button class="btn-primary" style="margin-top:12px" onclick="window.editScheduledMessage(' + widgetModalState.editingMessage.id + ')">Voltar</button>';
    }
  };

  window.removeAttachment = function() {
    if (!confirm('Deseja realmente remover o anexo?')) return;
    widgetModalState.removeAttachmentFlag = true;
    widgetModalState.editingMessage.attachments = null;
    renderWidgetModalContent();
  };

  function updateHeaderButton() {
    var btn = document.getElementById('cw-kanban-header-btn');
    if (!btn) return;

    if (widgetModalState.currentStage) {
      btn.classList.add('has-stage');
      btn.title = 'Kanban: ' + widgetModalState.currentStage.stageName;
    } else {
      btn.classList.remove('has-stage');
      btn.title = 'Configurações do Kanban';
    }
  }

  async function checkCurrentStageWidget() {
    var authHeaders = getAuthHeaders();
    if (!authHeaders || !currentConversationId) return;

    try {
      var res = await fetch(WIDGET_CONFIG.apiUrl + '/kanban/conversation/' + currentConversationId + '/stage', {
        headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders)
      });

      if (res.ok) {
        var data = await res.json();
        widgetModalState.currentStage = data.data;
        updateHeaderButton();
      }
    } catch (err) {
      // Ignore
    }
  }

  function checkConversationPageWidget() {
    var convId = getConversationIdFromUrl();

    if (convId) {
      currentConversationId = convId;
      var attempts = 0;
      var maxAttempts = 30;

      function tryAddButton() {
        console.log('[Kanban Widget] Tentativa ' + (attempts + 1) + ' de ' + maxAttempts);
        if (createHeaderButton()) {
          console.log('[Kanban Widget] Botão criado com sucesso!');
          checkCurrentStageWidget();
        } else {
          attempts++;
          if (attempts < maxAttempts) {
            setTimeout(tryAddButton, 500);
          } else {
            console.log('[Kanban Widget] Falhou após ' + maxAttempts + ' tentativas');
          }
        }
      }

      setTimeout(tryAddButton, 500);
    } else {
      currentConversationId = null;
      widgetModalState.currentStage = null;
      var btn = document.getElementById('cw-kanban-header-btn');
      if (btn) btn.remove();
    }
  }

  function setupWidgetNavigationDetection() {
    var widgetLastUrl = location.href;

    function onWidgetUrlChange() {
      if (location.href !== widgetLastUrl) {
        widgetLastUrl = location.href;
        checkConversationPageWidget();
      }
    }

    window.addEventListener('popstate', onWidgetUrlChange);

    setInterval(function() {
      if (location.href !== widgetLastUrl) {
        onWidgetUrlChange();
      }
    }, 500);
  }



  function initWidget() {
    injectWidgetCSS();
    createWidgetModal();
    setupWidgetNavigationDetection();
    checkConversationPageWidget();
    console.log('[Kanban Widget] Inicializado');
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initWidget);
  } else {
    setTimeout(initWidget, 100);
  }
})();
</script>
